﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
////int main()
////{
////	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		if (i = 5)
//			printf("%d ", i);
//	}
//	return 0;
//}
//int main() 
//{
//	int x = 3;
//	int y = 3;
//	switch (x % 2) 
//	{
//	case 1:
//		switch (y)
//		{
//		case 0:
//			printf("first");
//		case 1:
//			printf("second");
//			break;
//		default: printf("hello");
//		}
//	case 2:
//		printf("third");
//	}
//	return 0;
//}
//#include<math.h>
//#include<string.h>
//int main()
//{
//    char arr[100] = { 0 };
//    scanf("%s", arr);
//    int max = 0, min = 100;//max表示最多次数，min表示最少次数
//    int k = 100, i = 0, j = 0;
//    for (i = 'a'; i < 'z'; i++)//从‘a’开始分别统计其在arr中出现的次数
//    {
//        for (j = 0; j < strlen(arr); j++)//k从100开始，防止min恒为0
//        {
//            if (arr[j] == i)
//                k--;
//        }
//        if (100-k > max&&k!=100)//k！=100防止max恒为100
//            max = 100-k;
//        if (100-k < min)
//            min = 100-k;
//        k = 100;
//    }
//    int n = max - min;
//    k = sqrt(n);
//    int m = 0;
//    for (i = 2; i <= k; i++)//判断n是否为素数
//    {
//        if (n % i == 0)
//            m++;
//    }
//    if (m==0&&n!=0&&n!=1)//0和1既不是质数也不是合数，要排除掉
//        printf("Lucky Word\n%d", n);
//    else
//        printf("No Answer\n0");
//    return 0;
//}
//int a(int n, int m)
//{
//    //转化为十进制数sum1,但不能转化十六进制
//    int sum1 = 0;
//    int k = 1;
//    while (m != 0)
//    {
//        sum1 = sum1 + (m % 10) * k;
//        m /= 10;
//        k = k * n;
//    }
//    k = 0;
//    int t = sum1, sum2 = 0;
//    for (int i = 0; i < 30; i++)
//    {
//        
//        sum2 = 0, t = sum1,k=0;
//        while (t != 0)//求sum1逆序数sum2
//        {
//            sum2 = sum2 * 10 + t % 10;
//            t /= 10;
//        }
//        int sum = sum1 + sum2;//求sum1和sum2的和
//        sum1 = sum;
//        while (sum != 0)//求z的逆序数放在k中
//        {
//            k = k * 10 + sum % 10;
//            sum /= 10;
//        }
//        if (k == sum1)
//            return i+1;
//    }
//    return 0;
//}
//int main()
//{
//    int n = 0, m = 0;
//    scanf("%d%d", &n, &m);
//    int l = a(n, m);
//    if (l != 0)
//        printf("STEP=%d", l);
//    else
//        printf("Impossible");
//    return 0;
//}

//#include <stdio.h>
//#include <string.h>
//int main()//十六进制转十进制
//{
//    char a[100] = {0};
//    int i = 0, n = 0;
//    gets(a);
//    while (a[i])       //当读取到输入的最后一个字符之后，读取到0，跳出循环
//    {
//        if (a[i] >= '0' && a[i] <= '9') 
//        {           
//            n = n * 16 + a[i] - '0';   //a[i]-'0'利用ASCII码值差值求该位的值
//        }       
//        else if (a[i] >= 'a' && a[i] <= 'f') 
//        {
//            n = n * 16 + a[i] + 10 - 'a';//a[i]-'a'利用ASCII码值差值求该位的值
//        }          
//        else if (a[i] >= 'A' && a[i] <= 'F')
//        {
//            n = n * 16 + a[i] + 10 - 'A';//a[i]-'A'利用ASCII码值差值求该位的值
//        }          
//        i++;//从最高位依次往低一位遍历     
//    }
//    printf("\n%d", n);
//    return 0;
//}
//#include <string.h>
//#include <stdlib.h>
//int TenNum(char*p, int x);  //将输入的数字转换成10进制数
//void Numchang1(int m, int y); //将转换好了的10进制数转换为所需进制数（从最高位开始打印）
//void Numchang2(int m, int y); //将转换好了的10进制数转换为所需进制数（从最低位开始打印）
//int TenNum(char*p, int x)//将输入的数转化为十进制
//{
//	int len, i, num;
//	int sum = 0;
//	len = strlen(p); //求得字符串长度
//	for (i = 0; i < len; i++)
//	{
//		if (*(p + i) >= '0' && *(p + i) <= '9')
//			num = *(p + i) - '0';
//		else if (*(p + i) >= 'A' && *(p + i) <= 'F')
//			num = *(p + i) - 'A' + 10;
//		sum = sum * x + num;
//	}
//	return sum;
//}
//void Numchange1(int m, int y)//进制转换
//{
//	int n;
//	if (m)
//	{
//		Numchange1(m / y, y);//一直嵌套Numchange函数是为了让转化后的数字从最高位开始打印
//		n = m % y;
//		if (n < 10)
//			printf("%d", n);
//		else
//		{
//			if (n == 10)
//				printf("A");
//			if (n == 11)
//				printf("B");
//			if (n == 12)
//				printf("C");
//			if (n == 13)
//				printf("D");
//			if (n == 14)
//				printf("E");
//			if (n == 15)
//				printf("F");
//		}
//	}
//}
//void Numchange2(int m, int y)//进制转换
//{
//	int n;
//	//if (m)
//	while(m)
//	{
//		//Numchange1(m / y, y);//一直嵌套Numchange函数是为了让转化后的数字从最高位开始打印
//		n = m % y;
//		if (n < 10)
//			printf("%d", n);
//		else
//		{
//			if (n == 10)
//				printf("A");
//			if (n == 11)
//				printf("B");
//			if (n == 12)
//				printf("C");
//			if (n == 13)
//				printf("D");
//			if (n == 14)
//				printf("E");
//			if (n == 15)
//				printf("F");
//		}
//		m /= y;
//	}
//}
//int main()
//{
//	int t=0, b=0;
//	char a[20] = {0};
//	printf("请输入待转换数的进制（2-16）：");
//	do
//	{
//		scanf("%d", &t);
//	} while (t < 2 && t > 16);
//	printf("请输入待转换数：");
//	getchar();//吸收空格
//	gets(a);			  //将输入的n进制数存放在数组a中
//	int m = TenNum(a, t); //将输入的数字转换成十进制数
//	printf("请输入需要转成几进制数（2-16）：");
//	do
//	{
//		scanf("%d", &b);
//	} while (t < 2 && t > 16);
//	printf("%d进制数%s转换为%d进制数的结果为：\n", t, a, b);
//	Numchange1(m, b); //将十进制数转换为所需进制数，从最高位开始打印在屏幕上
//	printf("\n");
//	Numchange2(m, b); //将十进制数转换为所需进制数，从最低位开始打印在屏幕上
//	printf("\n");
//	return 0;
//}
//#include <stdio.h>
//#include<math.h>
//int main()
//{
//    int n = 0, i = 0;
//    int arr[1000] = { 0 };
//    scanf("%d", &n);
//    int max = 0;
//    for (i = 0; i < n; i++)
//    {
//        scanf("%d", &arr[i]);
//        int k = sqrt(arr[i]);
//        if (k * k != arr[i] && arr[i] > max)
//            max = arr[i];
//    }
//    printf("%d\n", max);
//    return 0;
//}
int main()
{
	int i = 0, t = 0;
	int f[400000] = { 0 };
	f[0] = 0; 
	f[1] = 1;
	scanf("%d", &t);
	for (i = 2; i <= t; i++)
		f[i] = f[i / 2] + f[i % 2];
	int n = 0;
	scanf("%d", &n);
	int k = n;
	for (i = 0; i <= t; i++)
	{
		if (f[i] == f[n])
		{
			k = i;
			break;
		}
	}
	printf("%d %d\n", f[n], k);
	return 0;
}